#负责调度缓存和终止缓存的函数
import time

def schedule_row_cache(conn,row_id,delay):
    #先设置数据行的延迟值
    conn.zadd('delay:',row_id,delay)
    #立即对需要缓存的数据行进行调度
    conn.zadd('schedule:',row_id,time.time())



def cahce_rows(conn):
    while not QUIT:
        #尝试获取下一个需要被缓存的数据行以及该行的调度时间戳，命令会返回一个包含0或1个元祖【tuple】的列表
        next=conn.zrange('schedule:',0,0,withscores=True)
        now=time.time()

        if not next or next[0][1]>now:
            #暂时没有行需要被缓存，休眠50毫秒后重试
            time.sleep(.05)
            continue
        row_id=next[0][0]

        #获取下一次调度的延迟水岸
        delay=conn.zscore('delay:',row_id)
        if delay<=0:
            #不必再缓存这个行，将他从缓存中移除
            conn.zrem('delay:',row_id)
            conn.delete('inv:'+row_id)
            continue

        #读取行数据
        row=Inventory.get(row_id)
        #更新调度时间并设置缓存值
        conn.zadd('schedule:',row_id,now+delay)
        conn.set('inv:'+row_id,json.dumps(row.to_dict()))


